/*
 * TermOccurrence.h
 *
 *  Created on: Nov 26, 2012
 *      Author: m
 */

#ifndef TERMOCCURRENCE_H_
#define TERMOCCURRENCE_H_

namespace physical
{

/**
 * Ocurrencia de un Término en una Frase
 *
 * Esta clase representa un par ( idTermino, idFrase )
 *  que implica que el término idTermino aparece en
 *  la frase idFrase
 */
struct __attribute__ ((__packed__)) TermOccurrence
{
public:

    /**
     * Constructor por defecto
     *
     * Crea un par (0,0)
     *
     */
    TermOccurrence();

    /**
     * Constructor por valor
     *
     * @param termId Id del término
     * @param phraseId Id de la frase
     */
    TermOccurrence( unsigned short termId, unsigned short phraseId );

    /**
     * Constructor por copia
     *
     * @param other
     */
    TermOccurrence( const TermOccurrence& other );

    /**
     * Destructor
     */
    virtual ~TermOccurrence();

    /**
     * Get PhraseId
     */
    unsigned short getPhraseId() const;

    /**
     * Set PhraseId
     *
     * @param phraseId
     */
    void setPhraseId( unsigned short phraseId );

    /**
     * Get TermId
     */
    unsigned short getTermId() const;

    /**
     * Set TermId
     *
     * @param termId
     */
    void setTermId( unsigned short termId );

    /**
     * Operador de asignación
     *
     * @param rhs
     * @return
     */
    TermOccurrence& operator =( const TermOccurrence& rhs );

    /**
     * Operador de comparación por igualdad
     *
     * @param other el elemento con el que se compara
     * @return true si es igual, false en caso contrario
     */
    bool operator ==( const TermOccurrence& other ) const;

    /**
     * Operador de comparación por desigualdad
     *
     * @param other el elemento con el que se compara
     * @return true si no es igual, false en caso contrario
     */
    bool operator !=( const TermOccurrence& other ) const;

protected:
    unsigned short m_termId;
    unsigned short m_phraseId;
};

} /* namespace physical */
#endif /* TERMOCCURRENCE_H_ */
